package com.whcoding.beetlsql.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.whcoding.beetlsql.dao.OrmDeptDao;
import com.whcoding.beetlsql.entity.OrmDeptVO;
import com.whcoding.beetlsql.service.OrmDeptService;
import lombok.extern.slf4j.Slf4j;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * Dept Service
 * </p>
 *
 * @author whcoding
 * @create: 2022-05-26 11:46
 */
@Service
@Slf4j
public class OrmDeptServiceImpl implements OrmDeptService {

    private final OrmDeptDao ormDeptDao;

    @Autowired
    public OrmDeptServiceImpl(OrmDeptDao ormDeptDao) {
        this.ormDeptDao = ormDeptDao;
    }

    /**
     * 新增用户
     *
     * @param dept 部门
     */
    @Override
    public OrmDeptVO saveDept(OrmDeptVO dept) {
        ormDeptDao.insert(dept, true);
        return dept;
    }

    /**
     * 批量插入部门
     *
     * @param depts 部门列表
     */
    @Override
    public void saveDeptList(List<OrmDeptVO> depts) {
        ormDeptDao.insertBatch(depts);
    }

    /**
     * 根据主键删除部门
     *
     * @param id 主键
     */
    @Override
    public void deleteDept(Long id) {
        ormDeptDao.deleteById(id);
    }

    /**
     * 更新Dept
     *
     * @param deptVO
     * @return 更新后的部门
     */
    @Override
    public OrmDeptVO updateDept(OrmDeptVO deptVO) {
        if (ObjectUtil.isNull(deptVO)) {
            throw new RuntimeException("用户id不能为null");
        }
        ormDeptDao.updateTemplateById(deptVO);
        return ormDeptDao.single(deptVO.getId());
    }

    /**
     * 查询单个部门
     *
     * @param id 主键id
     * @return 部门信息
     */
    @Override
    public OrmDeptVO getDept(Long id) {
        return ormDeptDao.single(id);
    }

    /**
     * 查询部门列表
     *
     * @return 部门列表
     */
    @Override
    public List<OrmDeptVO> getDeptList() {
        return ormDeptDao.all();
    }

    /**
     * 分页查询
     *
     * @param currentPage 当前页
     * @param pageSize    每页条数
     * @return 分页部门列表
     */
    @Override
    public PageQuery<OrmDeptVO> getDeptByPage(Integer currentPage, Integer pageSize) {
        return ormDeptDao.createLambdaQuery().page(currentPage, pageSize);
    }

    @Override
    public void templateDept() {
        OrmDeptVO ormDeptVO=new OrmDeptVO();
        ormDeptVO.setDeptName("开发");
        ormDeptVO.setDeptNo("1003");
        //1.传递参数查询
        List<OrmDeptVO> deptVOS= ormDeptDao.template(ormDeptVO);
        //2.传递参数查询 返回单条数据
        OrmDeptVO resultDeptVO= ormDeptDao.templateOne(ormDeptVO);
        //3.传递参数查询 获取count
        long deptCount= ormDeptDao.templateCount(ormDeptVO);
    }
}
